package com.xupt.easy.math;

/**
 * @author zhaoxin
 * @title: HammingWeight
 * @projectName LeetCode
 * @description: 191. 位1的个数
 * @date 2020/1/3 10:43
 */
public class HammingWeight {


    /**
     * 编写一个函数，输入是一个无符号整数，返回其二进制表达式中数字位数为 ‘1’ 的个数（也被称为汉明重量）。
     *
     *  
     *
     * 示例 1：
     *
     * 输入：00000000000000000000000000001011
     * 输出：3
     * 解释：输入的二进制串 00000000000000000000000000001011 中，共有三位为 '1'。
     *
     * @param n
     * @return
     */
    public int hammingWeight(int n) {
        int mask = 1;
        int count = 0;
        for (int i = 0; i < Integer.SIZE; i++) {
            if ((n & mask) != 0){
                count++;
            }
            // 任何数字跟掩码 1 进行逻辑与运算，都可以让我们获得这个数字的最低位。检查下一位时，我们将掩码左移一位
            mask <<= 1;
        }

        return count;
    }
}
